// Task 处理异步任务
//读取文件使用node的fs模块

//读取package.json文件并获取版本信息

const fs = require('fs')
const { task } = require('folktale/concurrency/task')
const { split, find } = require('lodash/fp')

function readFile (filename) {
    //task接收的函数是固定的->resolver  其中有两个方法： resolve 执行成功时执行 reject 操作失败时执行
    return task(resolver => {       //仅声明一个请求动作 该动作未被执行
        //readFile是异步读取文件 错误优先
        fs.readFile(filename, 'utf-8', (err, data) => {
            if (err) resolver.reject(err);

            //结果为 处理后 的数据
            resolver.resolve(data);
        })
    })
}

//获取版本信息：首先通过切割换行符 split 然后寻找含有version的元素find
readFile('package.json')        //不会读取文件 而是返回一个task函子
    //对返回值进行处理 task.map中调用了run函数获得返回值并进行处理 将处理结果取代了resolver.resolve
    .map(split('\n'))           //以换行符来切割字符串
    .map(find(x => x.includes('version')))      //遍历数组的每一项 查找项中包含version的元素并返回该项内容
    .run()                      //开始执行文件
    .listen( {                  //监听函数，用于监听失败/成功后的操作
        //失败，打印失败信息
        onRejected: err => {
            console.log(err);
        },
        //成功，打印获取的数据
        onResolved: value => {
            console.log(value);
        }
    })